import os
import pandas as pd

# 1. 配置路径
input_folder = "Filtered_By_Media"                # 存放 50 个媒体原始 Excel 的文件夹
output_folder = "Media_Monthly_Counts_Quad&Event"            # 存放输出结果的文件夹
os.makedirs(output_folder, exist_ok=True)

# 2. 遍历每个媒体文件
for fname in os.listdir(input_folder):
    if not fname.lower().endswith(".xlsx"):
        continue
    media_name = os.path.splitext(fname)[0]
    input_path = os.path.join(input_folder, fname)

    # 2.1 读取必要列
    df = pd.read_excel(input_path, dtype=str,
                       usecols=["MonthYear", "QuadClass", "EventRootCode"])

    # 2.2 预处理
    # 将 MonthYear (YYYYMM) 转为 pandas Period（按月）
    df["Month"] = pd.to_datetime(df["MonthYear"], format="%Y%m").dt.to_period("M")
    # QuadClass 保留为整数
    df["QuadClass"] = df["QuadClass"].astype(int)
    # EventRootCode 补齐两位
    df["EventRootCode"] = df["EventRootCode"].astype(str).str.zfill(2)

    # 3. 按月统计 QuadClass 数量
    quad_counts = (
        df
        .groupby(["Month", "QuadClass"])
        .size()
        .unstack(fill_value=0)
        .sort_index(axis=1)  # 列按 1,2,3,4 排序
    )
    quad_counts.index = quad_counts.index.to_timestamp().strftime("%Y-%m")

    # 4. 按月统计 EventRootCode 数量
    evt_counts = (
        df
        .groupby(["Month", "EventRootCode"])
        .size()
        .unstack(fill_value=0)
        .sort_index(axis=1)  # 列按 01,02,...,20 排序
    )
    evt_counts.index = evt_counts.index.to_timestamp().strftime("%Y-%m")

    # 5. 写入新的 Excel，两个 sheet
    output_path = os.path.join(output_folder, f"{media_name}.xlsx")
    with pd.ExcelWriter(output_path, engine="openpyxl") as writer:
        quad_counts.to_excel(writer, sheet_name="QuadClass")
        evt_counts.to_excel(writer, sheet_name="EventRootCode")

    print(f"✔ 处理完成：{media_name} → {output_path}")
